home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Hyper / Me-Mz / Memory Tools.cpt / Memory Tools / card_3017.txt < prev    next >
Text File  |  1989-01-07  |  4KB  |  123 lines

  1. -- card: 3017 from stack: in
  2. -- bmap block id: 0
  3. -- flags: 4000
  4. -- background id: 2630
  5. -- name: Disassembler
  6.  
  7.  
  8. -- part 7 (field)
  9. -- low flags: 80
  10. -- high flags: 0007
  11. -- rect: left=58 top=211 right=343 bottom=209
  12. -- title width / last selected line: 0
  13. -- icon id / first selected line: 0 / 0
  14. -- text alignment: 0
  15. -- font id: 3
  16. -- text size: 12
  17. -- style flags: 0
  18. -- line height: 16
  19. -- part name: 
  20.  
  21.  
  22. -- part contents for background part 3
  23. ----- text -----
  24.  48C0 48C0 48C0 48C0 48C0 48C0 48C0 48C0
  25.  
  26. -- part contents for background part 1
  27. ----- text -----
  28. Example Disassembly from Mac Plus
  29. Trap Dispatcher Code (from vector at $0028)
  30. This is the code that is called whenever a toolbox or operating system trap is executed it determines the address of the trap and transfers control to it. 
  31. Note that this was performed with a beta version of DASM and so the disassembly here may differ slightly in appearance from other disassemblies you produce.
  32.  
  33. Note too that all  values are Hexadecimal. 
  34.  
  35. 401F52  SUBQ.L  #0002,A7                    ;We enter with A7 pointing to PC
  36. 401F54  MOVEM.L  D1/D2/A2,-(A7)       ;We've effectively pushed 14 bytes
  37. 401F58  MOVE.L  10(A7),A2                    ;A2 points to the trap word
  38. 401F5C  MOVE.W  (A2)+,D2                      ;Now D2 holds the trap word.
  39. 401F5E  MOVE.L  A2,10(A7)                     ;The stack now holds the address after the 
  40.                                                                 ;trapword -- We'll return there.
  41. 401F62  MOVE.W  D2,D1                           ;Now D1 and D2 both hold the trapword.
  42. 401F64  ANDI.W  #1FF,D2                      ;Adjust D2 to hold the trapnumber.
  43. 401F68  CMPI.W  #A800,D1                   ;Is trapword smaller than A800?
  44. 401F6C  BCS  $401F88                             ;if so, then go to $401F88
  45. 401F6E  LEA  $C00,A2                              ;Now A2 points to the OS trap dispatch table.
  46. 401F72  LSL.W  #2,D2                              ;Double the trapnumber, and
  47. 401F74  MOVE.L  0(A2,D2.W),C(A7)         ;use it as an offset into the dispatch table.
  48.                                                                 ;We put the address of the trap right above  
  49.                                                                 ;the registers D1,D2,and A2 that we pushed 
  50.                                                                 ;at the start.
  51. 401F7A  CMPI.W  #AC00,D1                   ;Is the trapword smaller than AC00?
  52. 401F7E  MOVEM.L (A7)+, D1/D2/A2         ;Restore registers D1,D2, and A2.
  53. 401F82  BCS  $401F86                             ;If trapword is smaller than AC00 then go
  54. 401F84  POP.L  (A7)                                 ;Otherwise pop the trapaddress
  55. 401F86  RTS                                             ;Jump to the trap's address with the return
  56.                                                                  ;Address on the stack.
  57.  
  58. We come here if the trapword in D1 is smaller than A800.
  59. 401F88  LEA  $400,A2
  60. 401F8C  BCLR  #8,D2
  61. 401F90  BNE  $401FAC
  62. 401F92  LSL.W  #2,D2
  63. 401F94  MOVE.L  0(A2,D2.W),A2
  64. 401F98  MOVEM.L  A0/A1,-(A7)
  65. 401F9C  JSR  (A2)
  66. 401F9E  MOVEM.L (A7)+, A0/A1
  67. 401FA2  MOVEM.L (A7)+, D1/D2/A2
  68. 401FA6  ADDQ.W  #0004,A7
  69. 401FA8  TST.W  D0
  70. 401FAA  RTS
  71.  
  72. 401FAC  LSL.W  #2,D2
  73. 401FAE  MOVE.L  0(A2,D2.W),A2
  74. 401FB2  PUSH.L  A1
  75. 401FB4  JSR  (A2)
  76. 401FB6  POP.L  A1
  77. 401FB8  BRA  $401FA2
  78.  
  79. 401FBA  BTST  #9,D1
  80. 401FBE  BEQ  $401FE0
  81. 401FC0  ANDI.W  #1FF,D0
  82. 401FC4  LEA  $C00,A1
  83. 401FC8  BTST  #A,D1
  84. 401FCC  BNE  $401FD6
  85. 401FCE  ANDI.W  #FF,D0
  86. 401FD2  LEA  $400,A1
  87. 401FD6  LSL.W  #2,D0
  88. 401FD8  MOVE.L  A0,0(A1,D0.W)
  89. 401FDC  MOVEQ  #0,D0
  90. 401FDE  RTS
  91.  
  92. 401FE0  BSR  $401FE4
  93. 401FE2  BRA  $401FD6
  94.  
  95. 401FE4  ANDI.W  #1FF,D0
  96. 401FE8  LEA  $C00,A1
  97. 401FEC  CMPI.W  #57,D0
  98. 401FF0  BHI  $402004
  99. 401FF2  BEQ  $402000
  100. 401FF4  CMPI.W  #4F,D0
  101. 401FF8  BLS  $402000
  102. 401FFA  CMPI.W  #54,D0
  103. 401FFE  BNE  $402004
  104. 402000  LEA  $400,A1
  105. 402004  RTS
  106.  
  107. 402006  BSR  $401FE4
  108. 402008  BRA  $402026
  109.  
  110. 40200A  BTST  #9,D1
  111. 40200E  BEQ  $402006
  112. 402010  ANDI.W  #1FF,D0
  113. 402014  LEA  $C00,A1
  114. 402018  BTST  #A,D1
  115. 40201C  BNE  $402026
  116. 40201E  ANDI.W  #FF,D0
  117. 402022  LEA  $400,A1
  118. 402026  LSL.W  #2,D0
  119. 402028  MOVE.L  0(A1,D0.W),A0
  120. 40202C  MOVEQ  #0,D0
  121. 40202E  RTS
  122.  
  123.